package com.day12_Thread.BoxDemo;

/**
 * @ClassName: Box
 * @Author: zw
 * @Description: 出百万拳，行万里路；
 * @Create 2024/3/24-01:09
 * @Version 1.0
 */
public class Box {
    private int milk;
    // 定义一个state 表示是否奶箱有奶
    private Boolean state = false;
    // 存
    public synchronized void put(int milk) {
        if (state) { // 如果有牛奶那么应该等待消费者消费
            try {
                wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        // 没有牛奶就生产牛奶
        this.milk = milk;
        System.out.println("送奶工送奶" + this.milk);
        // 生产了牛奶就改变状态
        this.state = true;
        // 此处应该唤起其他线程等待的状态
        this.notifyAll();
    }
    // 获取
    public synchronized void get() {
        if (!state) { // 如果没有牛奶就等待生产
            try {
                wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        System.out.println("用户获取奶" + this.milk);
        // 消费完毕后，修改奶箱状态
        this.state = false;
        this.notifyAll(); // 唤醒所有
    }
}
